#include "mdns.h"

#include "esp_err.h"
#include "esp_event.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "mdns.h"
#include <stdio.h>


#include "esp_log.h"
#include "esp_wifi.h"
#include "nvs_flash.h"




static const char* TAG = "mdns discovery";

esp_err_t esp_mdns_discovery_start(void)
{
    char* host_name     = "ly_fast_charging";   // 主机名字
    char* instance_name = "神奇串口";             // 实例名字 第一个服务
    char* tow_mdns_name = "祝工的服务器";           // 第二个服务


    /* 初始化 mdns 组件 */
    if (mdns_init() != ESP_OK)
    {
        ESP_LOGE(TAG, "mdns_init fail");
        return ESP_FAIL;
    }
    /* 设置主机名，用于其他主机查询的 DNS 域名标识 */
    if (mdns_hostname_set(host_name) != ESP_OK)
    {
        ESP_LOGE(TAG, "mdns_hostname_set fail");
        goto err;
    }
    ESP_LOGI(TAG, "mdns hostname set to: [%s]", host_name);

    /* 设置 mDNS 实例名，用于 mDNS 局域网发现 */
    if (mdns_instance_name_set(instance_name) != ESP_OK)
    {
        ESP_LOGE(TAG, "mdns_instance_name_set fail");
        goto err;
    }

    if (mdns_instance_name_set(tow_mdns_name) != ESP_OK)
    {
        ESP_LOGE(TAG, "mdns_instance two_name_set fail");
        goto err;
    }

    /* 设置服务 TXT 字段数据 （可选的）*/
    mdns_txt_item_t serviceTxtData1[2] = {{"board", "esp32S3"}, {"path", "bobo"}};
    /* 设置服务 TXT 字段数据 （可选的）*/
    mdns_txt_item_t serviceTxtData2[2] = {{"board", "esp32S3"}, {"path", "paopao"}};

    /* 添加 http 服务，端口号 80 到 mDNS 服务 */
    /* 第二个参数代表应用层协议， 第三个参数代表传输层协议，需要对应 */
    if (mdns_service_add(instance_name, "_http", "_tcp", 80, serviceTxtData1, 2) != ESP_OK)
    {
        ESP_LOGE(TAG, "mdns_instance_name_set fail");
        goto err;
    }
    if (mdns_service_add(tow_mdns_name, "_http", "_tcp", 80, serviceTxtData2, 2) != ESP_OK)
    {
        ESP_LOGE(TAG, "mdns_instance_name_set fail");
        goto err;
    }
    return ESP_OK;
err:
    mdns_free();
    return ESP_FAIL;
}